package com.edu.baseAndBitOperations.base;

/**
 * 正数和负数是怎么在计算机中进行出储存的
 *
 * @作者 five-five
 * @创建时间 2021/4/16
 */
public class Demo03 {
    public static void main(String[] args) {
        //+7、-7在计算机中是如何储存的
        //有符号数有两部分组成：1.符号位：最高值表示符号，0为正，1为负   2.数值位
        //int的范围：-2的31次方~2的31次方-1(因为有一位是符号位)
//        int i=7;//+7
        //7:0b0000000000,0000000000,0000000001,11
        int i=0b00000000000000000000000000000111;
        System.out.println(i);

        //int j=-7;//-7
        //0b10000000000000000000000000000111;
        //计算机存储有符号数的时候是按照补码的形式存进去的
        //0b10000000000000000000000000000111;不是二进制的补码，而是二进制的原码
        //计算机有符号数据都是按照补码的形式存进去的

        //正数的原码反码补码都一样,负数的原码反码补码是不一样的
        //什么是原码：就是符号位+数值位
        //什么是反码：除符号位不变，其他位全部1变0,0变1
        //什么是补码：补码就是在反码的基础上加1
        /*

            +7:
                原码：0b0,00000000,00000000,00000000,00001,11
                反码：0b0,00000000,00000000,00000000,00001,11
                补码：0b0,00000000,00000000,00000000,00001,11

            -7:
                原码：0b1,00000000,00000000,00000000,00001,11
                反码：0b1,11111111,11111111,11111111,11110,00
                补码：0b1,11111111,11111111,11111111,11110,01
         */
        int j=0b11111111111111111111111111111001;//-7
        System.out.println(j);
        //计算机在显示给我们看的时候，会把补码转换为原码
        //怎么转：补码-1变成反码，剩下的除符号位不变，其余的0变1,1变0
    }
}
